/**
 * 转换为 [{label, value}] value为字符串
 * @param {Array} arr
 * @param {String} key
 * @param {String} value
 * @returns [{label, value}]
 */
export function asMapLabelValue(arr, key = 'label', value = 'value') {
  return arr.map((item) => {
    return {
      label: item[key],
      value: item[value]?.toString() ?? '',
    }
  })
}
/**
 * 英文转换为首字母大写
 * @param {String} str
 * @returns
 */
export function asCapitalizeFirstLetter(str) {
  if (!str) return str
  if (!/^[A-Za-z]/.test(str)) return str
  return str.charAt(0).toUpperCase() + str.slice(1)
}

/**
 * vxe-table筛选数组转换为参数
 * @param {Array} arr
 * @param {Array} date 当AsDatePicker组件type为 'datetimerange' | 'daterange' 时, 将该字段以数组的形式传入比如 ['date'], 你将得到 {beginDate, endDate}
 * @returns
 */
export function asConvertArrToParams(arr, date = []) {
  let result = { params: {} }
  arr?.forEach((item) => {
    const { field, values, datas } = item
    const validValue = values.find((v) => v !== undefined)
    const validData = datas.find((d) => d !== undefined)

    if (date.length && date.includes(field)) {
      // 日期字段特殊处理
      result.params['begin' + asCapitalizeFirstLetter(field)] = validData[0] || ''
      result.params['end' + asCapitalizeFirstLetter(field)] = validData[1] || ''
    } else {
      // 其他字段直接拼接
      result[field] = validData ? datas.join(',') : validValue ? values.join(',') : ''
    }
  })
  return result
}
